home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / C / ESPRESSO.ZIP / EXPLODE.C < prev    next >
Encoding:
C/C++ Source or Header  |  1987-03-14  |  1.7 KB  |  70 lines

  1. #include "espresso.h"
  2.  
  3. static pcube Gcube;
  4. static pset Gminterm;
  5.  
  6. pset minterms(T)
  7. pcover T;
  8. {
  9.     int size, var;
  10.     register pcube last;
  11.  
  12.     size = 1;
  13.     for(var = 0; var < cube.num_vars; var++)
  14.         size *= cube.part_size[var];
  15.     Gminterm = set_new(size);
  16.  
  17.     foreach_set(T, last, Gcube)
  18.         explode(cube.num_vars-1, 0);
  19.  
  20.     return Gminterm;
  21. }
  22.  
  23.  
  24. void explode(var, z)
  25. int var, z;
  26. {
  27.     int i, last = cube.last_part[var];
  28.     for(i=cube.first_part[var], z *= cube.part_size[var]; i<=last; i++, z++)
  29.         if (is_in_set(Gcube, i))
  30.             if (var == 0)
  31.                 set_insert(Gminterm, z);
  32.             else
  33.                 explode(var-1, z);
  34. }
  35.  
  36.  
  37. static int mapindex[16] = {0,1,3,2,4,5,7,6,12,13,15,14,8,9,11,10};
  38.  
  39. void map(T)
  40. pcover T;
  41. {
  42.     register int i, j, offset, p;
  43.     pset m = minterms(T);
  44.  
  45.     for(p = 0; p < cube.part_size[cube.num_vars-1]; p++) {
  46.         printf("\nOutput space # %d\n", p);
  47.         for(j = 0; j < 16; j += 4) {
  48.             offset = p*64;
  49.             for(i = j; i < j+4; i++)
  50.                 putchar(is_in_set(m,mapindex[i]+offset) ? '1' : '.');
  51.             putchar(' ');
  52.             offset = p*64 + 16;
  53.             for(i = j; i < j+4; i++)
  54.                 putchar(is_in_set(m,mapindex[i]+offset) ? '1' : '.');
  55.             putchar('\n');
  56.         }
  57.         putchar('\n');
  58.         for(j = 0; j < 16; j += 4) {
  59.             offset = p*64 + 32;
  60.             for(i = j; i < j+4; i++)
  61.                 putchar(is_in_set(m,mapindex[i]+offset) ? '1' : '.');
  62.             putchar(' ');
  63.             offset = p*64 + 48;
  64.             for(i = j; i < j+4; i++)
  65.                 putchar(is_in_set(m,mapindex[i]+offset) ? '1' : '.');
  66.             putchar('\n');
  67.         }
  68.     }
  69. }
  70.